import jj.*;
import visitor.*;
import syntaxtree.Program;
import java.io.*;

public class Main {

    public static void main(String[] args) throws ParseException, FileNotFoundException {
        //Para testar outros arquivo basta inserir a string correspondente
        //como testcode/BubbleSort.java, testcode/BinaryTree.java e etc...
        
        File file = new File("testcode/Factorial.java");

        if (!file.exists()) {
            System.out.print("\n\nArquivo não encontrado\n\n");
            return;
        }

        FileInputStream fileInputStream = new FileInputStream(file);
        new MiniJava(fileInputStream);

        try {
            Program program = MiniJava.Goal();           
            System.out.println("\nParse feito com sucesso\n\n");

            SymbolTableVisitor symbolTableVisitor = new SymbolTableVisitor();
            program.accept(symbolTableVisitor);

            TypeCheckVisitor typeCheckVisitor = new TypeCheckVisitor(symbolTableVisitor.getSymbolTable());
            program.accept(typeCheckVisitor);

        } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
    }
}
